#pragma once

#include "CoreMinimal.h"
#include "AbilitySystemComponent.h"
#include "Abilities/GameplayAbility.h"
#include "BoukenAbilitySystemComponent.generated.h"

/**
 * 
 */
UCLASS(ClassGroup = AbilitySystem, hidecategories = (Object, LOD, Lighting, Transform, Sockets, TextureStreaming), editinlinenew, meta = (BlueprintSpawnableComponent))
class BOUKEN_API UBoukenAbilitySystemComponent : public UAbilitySystemComponent
{
	GENERATED_BODY()

	UFUNCTION(BlueprintCallable, Category = "Ability System")
	void InitActors(AActor* InOwnerActor, AActor* InAvatarActor);
	
	UFUNCTION(BlueprintCallable, Category = "Ability System")
	void AcquireAbility(TSubclassOf<UGameplayAbility> Ability, const int32 Level = 1, const int32 InputID = 0);

	UFUNCTION(BlueprintCallable, Category = "Ability System")
	void GetActiveAbilitiesWithTags(const FGameplayTagContainer& GameplayTagContainer, TArray<UGameplayAbility*>& ActiveAbilities, bool bOnlyAbilitiesThatSatisfyTagRequirements = true);
};
